#Dataset original jugadores de fifa21
origi_data21 <- read_csv("players_21.csv", col_names = TRUE)
#Dataset original jugadores de fifa22
origi_data22<-read_csv("players_22.csv", col_names = TRUE)
#Dataset original jugadores de fifa15
origi_data15<-read_csv("players_15.csv", col_names = TRUE)#Esta función busca las columnas necesarias del dataset original y crea uno nuevo y le agrega una columna nueva de clasificación
fun_dataNecesaria <- function(data) { # Seleccionar columnas deseadas
data <- data[, c("short_name", "player_positions", "overall", "potential",
"value_eur", "age", "club_name", "league_name", "nationality_name",
"preferred_foot", "pace", "shooting", "passing", "dribbling",
"defending", "physic")]
# Agregar columna de clasificación
data$clasificacion <- NA
for (i in 1:nrow(data)) {
if (data$overall[i] >= 80) {
data$clasificacion[i] <- "Elite"
} else if (data$overall[i] >= 60) {
data$clasificacion[i] <- "Bueno"
} else {
data$clasificacion[i] <- "Promedio"
}
}
return(data)
}names(origi_data21)#Columnas del set de datos
#Visión general del set de datos
str(origi_data21)
glimpse(origi_data21)
#Nulos set de datos players_21
any(is.na(fdata_21))#Conocimiento de valores nulos
sum(is.na(fdata_21))#Suma total de valores nulos
sapply(fdata_21, function(x) sum(is.na(x)))# Contar valores NA por columna
#Nulos set de datos players_22
any(is.na(fdata_22))#Conocimiento de valores nulos
sum(is.na(fdata_22))#Suma total de valores nulos
sapply(fdata_22, function(x) sum(is.na(x)))# Contar valores NA por columna¿Cuál es la mayor conformación de jugadores “Elite” en las 5 grandes ligas?
#Esta función reune la información de las que consideramos las 5 grandes ligas Spain Primera Division,Premier League, Serie A,Bundesliga,Ligue 1
#Datos de las 5 grandes ligas/ Funcion que busca datos de las 5 grandes ligas
fun_best_league<-function(data){
result_five<-data %>%
filter(league_name %in% c("Spain Primera Division","English Premier League", "Italian Serie A","German 1. Bundesliga",
"French Ligue 1") & clasificacion == "Elite" )
return(result_five)
}# Función que crea un gráfico de barras interactivo con los resultados de los jugadores élite de cada liga
fun_grafico_jugadores_elite_plotly <- function(data_final, year) {
# Contar el número de jugadores élite por liga
data_contada <- data_final %>%
count(league_name)
# Crear el gráfico de barras interactivo
barras_plot1 <- plot_ly(
data = data_contada,
x = ~league_name,
y = ~n, # 'n' es la columna generada por count() que contiene el conteo
type = 'bar',
marker = list(color = 'rgba(31, 119, 180, 0.8)', line = list(color = 'rgba(0, 0, 0, 1.0)', width = 1.5)),
text = ~n,
textposition = 'auto',
hoverinfo = 'x+y'
) %>%
layout(
title = paste("Distribución de jugadores Elite por liga (", year, ")"),
xaxis = list(
title = "Ligas",
tickvals = c("Spain Primera Division", "English Premier League", "Italian Serie A", "German 1. Bundesliga", "French Ligue 1"),
ticktext = c("La Liga (España)", "Premier League (Inglaterra)", "Serie A (Italia)", "Bundesliga (Alemania)", "Ligue 1 (Francia)"),
tickangle = -45
),
yaxis = list(title = "Número de Jugadores"),
plot_bgcolor = "#C1CDC1"
)
return(barras_plot1)
}# Función que crea un gráfico de barras comparativo sobre los jugadores élite por liga
fun_grafico_comparativo_barras_plotly <- function(data1, data2, year1, year2) {
# Añadir la columna de año a cada conjunto de datos
data1$year <- as.character(year1)
data2$year <- as.character(year2)
# Combinar los conjuntos de datos
union_data <- rbind(data1, data2)
# Agrupar y contar el número de jugadores élite por liga y año
data_contada <- union_data %>%
group_by(league_name, year) %>%
summarise(n = n())
# Crear el gráfico de barras interactivo
barras_plot2 <- plot_ly(
data = data_contada,
x = ~league_name,
y = ~n,
color = ~year,
type = 'bar',
text = ~paste(n),
textposition = 'outside',
hoverinfo = 'text+y'
) %>%
layout(
title = paste("Comparativa de Jugadores Elite por Liga (", year1, "vs", year2, ")"),
xaxis = list(
title = "Ligas",
tickvals = c("Spain Primera Division", "English Premier League", "Italian Serie A", "German 1. Bundesliga", "French Ligue 1"),
ticktext = c("La Liga (España)", "Premier League (Inglaterra)", "Serie A (Italia)", "Bundesliga (Alemania)", "Ligue 1 (Francia)"),
tickangle = -45
),
yaxis = list(title = "Jugadores Elite"),
barmode = 'group',
plot_bgcolor = "#C1CDC1",
bargap = 0.2,
bargroupgap = 0.1
)
return(barras_plot2)
} ¿Cuánto varia el rango de jugadores respecto a la temporada anterior (21)y la siguiente temporada(22)?
# Dataset original jugadores de FIFA 21
origi_data21 <- read_csv("players_21.csv", col_names = TRUE)## Rows: 18944 Columns: 110
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (48): player_url, short_name, long_name, player_positions, club_name, l...
## dbl (60): sofifa_id, overall, potential, value_eur, wage_eur, age, height_c...
## date (2): dob, club_joined
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Dataset original jugadores de FIFA 22
origi_data22 <- read_csv("players_22.csv", col_names = TRUE)## Rows: 19239 Columns: 110
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (48): player_url, short_name, long_name, player_positions, club_name, l...
## dbl (60): sofifa_id, overall, potential, value_eur, wage_eur, age, height_c...
## date (2): dob, club_joined
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
fun_dataNecesaria <- function(data) {
data <- data[, c("short_name", "player_positions", "overall", "potential",
"value_eur", "age", "club_name", "league_name", "nationality_name",
"preferred_foot", "pace", "shooting", "passing", "dribbling",
"defending", "physic")]
data$clasificacion <- ifelse(data$overall >= 80, "Elite", ifelse(data$overall >= 60, "Bueno", "Promedio"))
return(data)
}
fdata_21 <- fun_dataNecesaria(origi_data21)
fdata_22 <- fun_dataNecesaria(origi_data22)get_top_players_by_position <- function(data, num_players = 2) {
data %>%
filter(clasificacion == "Elite") %>%
group_by(player_positions) %>%
arrange(desc(overall)) %>%
slice_head(n = num_players) %>%
ungroup()
}
top_players_21 <- get_top_players_by_position(fdata_21)
top_players_22 <- get_top_players_by_position(fdata_22)# Proporción de clasificaciones por año
get_classification_proportions <- function(data, year) {
data %>%
group_by(clasificacion) %>%
summarise(count = n()) %>%
mutate(proportion = count / sum(count),
year = year)
}
classification_21 <- get_classification_proportions(fdata_21, 2015)
classification_22 <- get_classification_proportions(fdata_22, 2022)
# Combinar datos de proporciones
combined_classifications <- rbind(classification_21, classification_22)
# Gráfico circular para 2021
pie_2021 <- plot_ly(classification_21, labels = ~clasificacion, values = ~proportion, type = 'pie',
textinfo = 'label+percent', insidetextorientation = 'radial',
hoverinfo = 'text',
text = ~paste("Clasificación:", clasificacion, "<br>Proporción:", round(proportion * 100, 2), "%")) %>%
layout(title = "Distribución de Clasificaciones (FIFA 21)")
# Gráfico circular para 2022
pie_2022 <- plot_ly(classification_22, labels = ~clasificacion, values = ~proportion, type = 'pie',
textinfo = 'label+percent', insidetextorientation = 'radial',
hoverinfo = 'text',
text = ~paste("Clasificación:", clasificacion, "<br>Proporción:", round(proportion * 100, 2), "%")) %>%
layout(title = "Distribución de Clasificaciones (FIFA 22)")
# Mostrar gráficos interactivos
pie_2021Conforme al potencial actual del jugador¿Cómo evolucionaría en la siguiente temporada?
#Función para crear un nuevo dataframe solo con las habilidades de cada jugador
fun_habilidades<- function(data){#data == al set de datos a utilizar
data<-data %>% #Creacion de dataframe con las habilidades de los jugadores
select(short_name,potential, everything()[11:16])
#Limpieza de los datos(Eliminancion de NA no se uso por no tener informacion sobre sus estadisticas)
data<-data %>%
drop_na()
return(data)
}
habilidades_15<-fun_habilidades(fdata_15)#///
habilidades_15#Se creo una funcion que tiene como proposito tratar de predicir las habilidades de los jugadores para la siguiente temporada
#2.Dataframe para la prediccion de los jugadores
fun_predicion_players <- function(data) {
data<-data %>%
drop_na()
# Seleccionar las columnas específicas
data <- data %>%
select(short_name, potential, pace, shooting, passing, dribbling, defending, physic)
# Evaluar y modificar las columnas de habilidades
for (i in 1:nrow(data)) {
if (data$potential[i] >= 90) {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] + 1
} else if (data$potential[i] >= 70) {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] + 2
} else if (data$potential[i] >= 60) {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] - 1
} else {
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] <-
data[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")] + 0
}
}
return(data)
}
predic_2015<-fun_predicion_players(fdata_15)
head(predic_2015)#3.Funcion que calcular la nota general de las habilidades de un jugador
fun_overall_player <- function(player, data) {
# Defenicion de pesos
pesos <- c(pace = 0.2, shooting = 0.2, passing = 0.2, dribbling = 0.2, defending = 0.1, physic = 0.1)
# Filtrar el dataframe para obtener el jugador específico
solicitud <- data %>%
filter(short_name == player)
if (nrow(solicitud) == 0) {
print("Jugador no encontrado")
}
# Calcular el overall_habilidad usando sapply
overall_habilidad <- sapply(1:nrow(solicitud), function(i) {
sum(as.numeric(solicitud[i, c("pace", "shooting", "passing", "dribbling", "defending", "physic")]) * pesos)
})
# Crear un dataframe con los resultados deseados
resultado <- data.frame( short_name = solicitud$short_name,
potential = solicitud$potential,
pace = solicitud$pace,
shooting = solicitud$shooting,
passing = solicitud$passing,
dribbling = solicitud$dribbling,
defending = solicitud$defending,
physic = solicitud$physic,
overall_habilidad = overall_habilidad )
return(resultado)
}
fun_overall_player("L. Messi", fdata_15)#Se creo esta función que tiene como proposito realizar un grafico radar recibiendo 5 parametros
#player = Nombre del jugador
#data1 = Primer set de datos a utilizar
#data2 = Segundo set de datos a utilizar
#Year1 = Año del primer set de datos evaluado
#Year2 = Año del segundo set de datos evaluado
# Función que crea un gráfico de radar interactivo
fun_radar_doble_interactivo <- function(player, data1, data2, year1, year2) {
# Filtrar y seleccionar las columnas específicas para el jugador
data1 <- data1 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
data2 <- data2 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
# Combinar los datos y agregar años
vect_data <- rbind(
cbind(data1, Year = year1),
cbind(data2, Year = year2)
)
# Crear el gráfico de radar interactivo
radar_chart <- plot_ly(
type = 'scatterpolar',
fill = 'toself'
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year1, 1:6]),
theta = names(vect_data)[1:6],
name = as.character(year1)
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year2, 1:6]),
theta = names(vect_data)[1:6],
name = as.character(year2)
) %>%
layout(
polar = list(
radialaxis = list(
visible = TRUE,
range = c(0, 100)
)
),
title = paste("Comparativa de habilidades de", player)
)
return(radar_chart)
}#Se realizo una función la cual tiene como proposito recibir 7 parametros en donde el player es el nombre del jugador data1 al 3 es set de datos que queremos evaluar y year1 al 3 el año de la evaluación
# Función que crea un gráfico de radar interactivo
fun_radar_triple_interactivo <- function(player, data1, data2, data3, year1, year2, year3) {
# Filtrar y seleccionar las columnas específicas para el jugador
data1 <- data1 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
data2 <- data2 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
data3 <- data3 %>%
filter(short_name == player) %>%
select(pace, shooting, passing, dribbling, defending, physic)
# Combinar los datos y agregar años
vect_data <- rbind(
cbind(data1, Year = year1),
cbind(data2, Year = year2),
cbind(data3, Year = year3)
)
# Crear el gráfico de radar interactivo
radar_chart <- plot_ly(
type = 'scatterpolar',
fill = 'toself'
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year1, 1:6]),
theta = names(vect_data)[1:6],
name = year1
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year2, 1:6]),
theta = names(vect_data)[1:6],
name = year2
) %>%
add_trace(
r = as.numeric(vect_data[vect_data$Year == year3, 1:6]),
theta = names(vect_data)[1:6],
name = year3
) %>%
layout(
polar = list(
radialaxis = list(
visible = TRUE,
range = c(0, 100)
)
),
title = paste("Comparativa de habilidades de", player)
)
return(radar_chart)
}Conforme a la edad como afectan las habilidades del jugador
# Crear el gráfico de pastel interactivo
fun_preferred_foot_pie<-function(data1,year){
data_count1<-data1 %>%
group_by(preferred_foot) %>%
count(preferred_foot)
pastel_chart <- plot_ly(
data = data_count1,
labels = ~preferred_foot,
values = ~n,
type = 'pie',
textinfo = 'label+percent',
insidetextorientation = 'radial',
marker = list(colors = c( "#79CDCD", "#BC8F8F"))
) %>%
layout(
title = paste("Distribución pie habil año", year)
)
return(pastel_chart)
}